package br.lsi.supercurriculum.beans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;

import br.lsi.supercurriculum.entidades.Contato;
import br.lsi.supercurriculum.entidades.Pessoa;
import br.lsi.supercurriculum.entidades.TipoContato;
import br.lsi.supercurriculum.entidades.Usuario;
import br.lsi.supercurriculum.facades.PessoaFacadeImpl;
import br.lsi.supercurriculum.facades.TipoContatoFacadeImpl;
import br.lsi.supercurriculum.interfaces.PessoaFacade;
import br.lsi.supercurriculum.interfaces.TipoContatoFacade;

@ManagedBean
@SessionScoped
public class ContatoBean {

	private Contato contato;
	private TipoContato tipoContato;
	private List<Contato> contatos = new ArrayList();

	private Pessoa pessoa;
	private Usuario usuario;

	private PessoaFacade pessoaFacade;
	private TipoContatoFacade tipoContatoFacade;

	public ContatoBean() {
		this.getUserLogin();
		this.pessoaFacade = new PessoaFacadeImpl();
		this.tipoContatoFacade = new TipoContatoFacadeImpl();
		this.pessoa = pessoaFacade.getPessoa(usuario);
		this.novoContato();
		this.novoTipoContato();
	}

	public void addContato(Contato contato) {
		contatos.add(contato);
	}

	private void getUserLogin() {
		usuario = new Usuario();
		SecurityContext context = SecurityContextHolder.getContext();
		if (context instanceof SecurityContext) {
			Authentication authentication = context.getAuthentication();
			if (authentication instanceof Authentication) {
				usuario.setUsername(((User) authentication.getPrincipal())
						.getUsername());
			}
		}
	}

	public void salvarContato() {
		this.pessoaFacade.salvarOuAtualizar(pessoa);
	}

	public void novoContato() {
		this.contato = new Contato();
	}

	public void novoTipoContato() {
		this.tipoContato = new TipoContato();
	}

	public void salvarTipoContato() {
		this.tipoContatoFacade.salvar(tipoContato);
	}

	public Contato getContato() {
		return contato;
	}

	public void setContato(Contato contato) {
		this.contato = contato;
	}

	public TipoContato getTipoContato() {
		return tipoContato;
	}

	public void setTipoContato(TipoContato tipoContato) {
		this.tipoContato = tipoContato;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public PessoaFacade getPessoaFacade() {
		return pessoaFacade;
	}

	public void setPessoaFacade(PessoaFacade pessoaFacade) {
		this.pessoaFacade = pessoaFacade;
	}

	public TipoContatoFacade getTipoContatoFacade() {
		return tipoContatoFacade;
	}

	public void setTipoContatoFacade(TipoContatoFacade tipoContatoFacade) {
		this.tipoContatoFacade = tipoContatoFacade;
	}

	public List<Contato> getContatos() {
		return contatos;
	}

	public void setContatos(List<Contato> contatos) {
		this.contatos = contatos;
	}

}